// pages/my/my.js
Page({
  data: {
    userInfo: null, // 用于存储用户信息
    userInfo_tank: true, // 弹框显示状态
    avatarUrl: '', // 头像URL
    nickName: '', // 昵称
    openid: '', // 用户的 openid
  },

  onLoad() {
    // 获取 openid 并检查本地存储的用户信息
    this.getOpenidAndCheckUser();
    this.checkForNewAnnouncements(); // 检查是否有新的公告
  },

  // 获取 openid 并检查用户是否已经注册
  getOpenidAndCheckUser() {
    wx.cloud.callFunction({
      name: 'login', // 调用云函数 'login' 获取 openid
      success: res => {
        console.log('云函数获取到的 openid: ', res.result.openid);
        this.setData({
          openid: res.result.openid,
        });
        
        // 根据 openid 检查用户是否已经注册
        wx.cloud.database().collection('user').where({
          _openid: res.result.openid,
        }).get().then(res => {
          if (res.data.length > 0) {
            this.setData({
              userInfo: res.data[0],
              userInfo_tank: false, // 如果已注册，关闭弹框
            });
            wx.setStorageSync('user', res.data[0]); // 存储用户信息
          }
        });
      },
      fail: err => {
        console.error('获取 openid 失败', err);
      },
    });
  },

  // 退出登录
  tuichu() {
    wx.setStorageSync('user', null); // 清空本地存储的用户信息
    this.setData({
      userInfo: null, // 清空页面用户信息
    });
  },

  // 关闭/打开弹框
  closeTank() {
    if (!this.data.userInfo_tank) {
      wx.cloud.database().collection('user')
        .get()
        .then(res => {
          console.log("用户信息====", res);
          if (res.data.length) {
            this.setData({
              userInfo: res.data[0],
              userInfo_tank: false,
            });

            wx.setStorageSync('user', res.data[0]);
          } else {
            console.log("还未注册====", res);
            this.setData({
              userInfo_tank: true,
            });
          }
        }).catch(() => {
          console.log('请添加user表');
        });
    } else {
      this.setData({
        userInfo_tank: false,
      });
    }
  },

  // 获取头像
  onChooseAvatar(e) {
    console.log(e);
    this.setData({
      avatarUrl: e.detail.avatarUrl,
    });
  },

  // 获取用户昵称
  getNickName(e) {
    console.log(e);
    this.setData({
      nickName: e.detail.value,
    });
  },

  // 提交注册
  submit() {
    if (!this.data.avatarUrl) {
      return wx.showToast({
        title: '请选择头像',
        icon: 'error',
      });
    }
    if (!this.data.nickName) {
      return wx.showToast({
        title: '请输入昵称',
        icon: 'error',
      });
    }

    // 检查是否已经注册
    wx.cloud.database().collection('user').where({
      _openid: this.data.openid,
    }).get().then(res => {
      if (res.data.length > 0) {
        wx.showToast({
          title: '该微信账号已注册',
          icon: 'none',
        });
        return;
      }

      this.setData({
        userInfo_tank: false,
      });
      wx.showLoading({
        title: '正在注册',
        mask: true,
      });

      const tempPath = this.data.avatarUrl;
      const suffix = /\.[^\.]+$/.exec(tempPath)[0];
      console.log(suffix);

      // 上传到云存储
      wx.cloud.uploadFile({
        cloudPath: 'userimg/' + new Date().getTime() + suffix, // 在云端的文件名称
        filePath: tempPath, // 临时文件路径
        success: res => {
          console.log('上传成功', res);
          const fileID = res.fileID;
          wx.hideLoading();
          wx.cloud.database().collection('user')
            .add({
              data: {
                avatarUrl: fileID,
                nickName: this.data.nickName,
                isAdmin: false, // 默认非管理员
                _openid: this.data.openid, // 将 openid 存储
              },
            }).then(() => {
              const user = {
                avatarUrl: fileID,
                nickName: this.data.nickName,
                isAdmin: false, // 默认非管理员
                _openid: this.data.openid, // 将 openid 存储
              };
              // 注册成功
              console.log('注册成功');
              wx.setStorageSync('user', user);

              this.setData({
                userInfo: user,
              });
            }).catch(() => {
              console.log('注册失败');
              wx.showToast({
                icon: 'error',
                title: '注册失败',
              });
            });
        },
        fail: err => {
          wx.hideLoading();
          console.log('上传失败', err);
          wx.showToast({
            icon: 'error',
            title: '上传头像错误',
          });
        },
      });
    });
  },

  // 进入管理员页面
  enterAdminPage() {
    const userId = this.data.userInfo?._id; // 获取用户ID
    console.log("userId", userId);
    if (!userId) {
      wx.showToast({
        title: '无法获取用户信息',
        icon: 'none',
      });
      return;
    }

    // 实时从数据库中获取用户信息，判断是否是管理员
    wx.cloud.database().collection('user')
      .doc(userId)
      .get()
      .then(res => {
        if (res.data.isAdmin) {
          // 如果是管理员，跳转到管理员页面
          wx.navigateTo({
            url: '/pages/admin/admin',
          });
        } else {
          // 非管理员弹出提醒
          wx.showToast({
            title: '您不是管理员，无法进入',
            icon: 'none',
          });
        }
      })
      .catch(err => {
        console.error("查询用户信息失败", err);
        wx.showToast({
          title: '无法获取用户信息',
          icon: 'none',
        });
      });
  },

  // 检查是否有新的公告
  checkForNewAnnouncements() {
    wx.cloud.callFunction({
      name: 'login', // 获取 openid
      success: res => {
        wx.cloud.database().collection('user').where({
          _openid: res.result.openid
        }).get().then(userRes => {
          const user = userRes.data[0];
          wx.cloud.database().collection('announcements').orderBy('timestamp', 'desc').get().then(announcementRes => {
            const latestAnnouncement = announcementRes.data[0];
            if (latestAnnouncement.timestamp > user.lastReadAnnouncement) {
              wx.showModal({
                title: '新公告',
                content: latestAnnouncement.title,
                confirmText: '查看',
                success: (result) => {
                  if (result.confirm) {
                    wx.navigateTo({
                      url: '/pages/announcements/announcements'
                    });
                  }
                }
              });
            }
          });
        });
      }
    });
  },

  // 进入测试页面
  enterTestPage() {
    wx.navigateTo({
      url: '/pages/my/test/test',
    });
  },

  // 进入作者信息页面
  enterAbout_Author() {
    wx.navigateTo({
      url: '/pages/my/about_author/about_author',
    });
  },

  // 进入公告页面
  enterNotice() {
    wx.navigateTo({
      url: '/pages/my/notice/notice',
    });
  },
});
